﻿using System;
using System.Linq;
using System.Windows.Forms;
using ConnectionBase;
using CoreEveprod;

namespace EveProd
{
	public partial class FormProfil : Form
	{
		DataClassesEveProdDataContext _dataContext = new DataClassesEveProdDataContext();

		public FormProfil()
		{
			InitializeComponent();
			ChargementListStations();
		}

		/// <summary>
		/// Met dans les comboBox, toutes les Regions.
		/// </summary>
		private void ChargementListStations()
		{
			// Je récupère tout les noms de Région.
			var regions = (from reg in _dataContext.Regions
						   orderby reg.NomRegion
						   select reg.NomRegion);

			// Et les ajoutes aux 2 ComboBox.
			foreach (var region in regions)
			{
				if (region == "Unknown") continue;
				comboBoxAchatRegion.Items.Add(region);
				comboBoxVenteRegion.Items.Add(region);
			}
		}

		/// <summary>
		/// Quitte la fenêtre.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void buttonQuitter_Click(object sender, EventArgs e)
		{
			Close();
		}

		/// <summary>
		/// Sauvegarde tout le profil saisi dans un fichier XML.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void buttonSaveProfil_Click(object sender, EventArgs e)
		{
			// Je vais prendre les ID des stations de vente et achat.
			string idVente = "";
			string idAchat = "";
			
			if(comboBoxVenteStation.Text != "")
			{
				idVente = (from gg in _dataContext.Stations
			               where gg.NomStation == comboBoxVenteStation.Text
			               select gg.IdStation).First().ToString();
			}
			if(comboBoxAchatStation.Text != "")
			{
				idAchat = (from gg in _dataContext.Stations
						   where gg.NomStation == comboBoxAchatStation.Text
						   select gg.IdStation).First().ToString();
			}

			ProfilProvider.CreateProfil(Convert.ToInt32(comboBoxIndustry.SelectedItem), Convert.ToInt32(comboBoxProdEff.SelectedItem), textBoxNomProfil.Text, idVente,idAchat);
			ProfilProvider.SauvegarderProfil();
			Close();
		}

		/// <summary>
		/// Au moment du chargement de la fenêtre.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void Profil_Load(object sender, EventArgs e)
		{
			// Je met les comboBox sur l'index Zéro.
			comboBoxProdEff.SelectedIndex = 0;
			comboBoxIndustry.SelectedIndex = 0;
		}

		#region Mise à jour comboBoX
		/// <summary>
		/// Mise à jour de la liste Système par rapport à la région.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void comboBoxAchatRegion_SelectedIndexChanged(object sender, EventArgs e)
		{
			string regionSelectionne = comboBoxAchatRegion.Text;

			// Je récupère l'id de la Région.
			var idRegion = (from region in _dataContext.Regions
							where region.NomRegion == regionSelectionne
							select region.IdRegion).First();

			// Je récupère les systèmes correspondant à la région sélectionné.
			var system = (from syst in _dataContext.Systemes
						  where syst.IdRegion == idRegion
						  orderby syst.NomSystem
						  select syst.NomSystem);

			comboBoxAchatSystem.Items.Clear();
			comboBoxAchatSystem.Text = "";

			// Je les ajoutes dans le comboxBoxSystem
			foreach (var nomSysteme in system)
			{
				comboBoxAchatSystem.Items.Add(nomSysteme);
			}

		}

		/// <summary>
		/// Méthode qui met à jour le comboxAchatStation.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void comboBoxAchatSystem_SelectedIndexChanged(object sender, EventArgs e)
		{
			// Je récupère l'ID du système choisi.
			var idSysteme = (from syst in _dataContext.Systemes
							 where syst.NomSystem == comboBoxAchatSystem.Text
							 select syst.IdSystem).First();

			// Je vais chercher les Stations liés à ce système.
			var stations = (from station in _dataContext.Stations
							where station.IdSystem == idSysteme
							orderby station.NomStation
							select station.NomStation);

			comboBoxAchatStation.Items.Clear();
			comboBoxAchatStation.Text = "";

			foreach (var station in stations)
			{
				comboBoxAchatStation.Items.Add(station);
			}
		}

		/// <summary>
		/// Méthode qui met à jour le comboxVenteSystems.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void comboBoxVenteRegion_SelectedIndexChanged(object sender, EventArgs e)
		{
			string regionSelectionne = comboBoxVenteRegion.Text;

			// Je récupère l'id de la Région.
			var idRegion = (from region in _dataContext.Regions
							where region.NomRegion == regionSelectionne
							select region.IdRegion).First();

			// Je récupère les systèmes correspondant à la région sélectionné.
			var system = (from syst in _dataContext.Systemes
						  where syst.IdRegion == idRegion
						  orderby syst.NomSystem
						  select syst.NomSystem);

			comboBoxVenteSystem.Items.Clear();
			comboBoxVenteSystem.Text = "";

			// Je les ajoutes dans le comboxBoxSystem
			foreach (var nomSysteme in system)
			{
				comboBoxVenteSystem.Items.Add(nomSysteme);
			}
		}

		/// <summary>
		/// Méthode qui met à jour le comboxVenteStation.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void comboBoxVenteSystem_SelectedIndexChanged(object sender, EventArgs e)
		{
			// Je récupère l'ID du système choisi.
			var idSysteme = (from syst in _dataContext.Systemes
							 where syst.NomSystem == comboBoxVenteSystem.Text
							 select syst.IdSystem).First();

			// Je vais chercher les Stations liés à ce système.
			var stations = (from station in _dataContext.Stations
							where station.IdSystem == idSysteme
							orderby station.NomStation
							select station.NomStation);

			comboBoxVenteStation.Items.Clear();
			comboBoxVenteStation.Text = "";

			foreach (var station in stations)
			{
				comboBoxVenteStation.Items.Add(station);
			}
		} 
		#endregion

	}
}
